def error1(p,item):
    linea = "Error 1: Variable " + item.nombre + " ya esta declarada dentro del ambito"
    escribir_archivo(p,linea)

def error2(p):
    linea = "Error 2: Subprograma " + p[1] + " Nunca declarado"
    escribir_archivo(p,linea)

def error3(p):
    linea = "Error 3: Variable " + p[1] + " no declarada" + " Ambito: " + p.parser.actual.nombre
    escribir_archivo(p,linea)

def error3b(p,nombre):
    linea = "Error 3: Variable " + nombre + " no declarada" + " Ambito: " + p.parser.actual.nombre
    escribir_archivo(p,linea)

def error4(p,item):
    linea = "Error 4: "+ item.nombre + " ya esta declarada dentro de los parametros"
    escribir_archivo(p,linea)

def error5(p):
    linea = "Error 5: Cantidad de parametros Incorrecta En " + p.parser.actual.elementos[p[1]].tipo_token + " " + p[1] + "[Declarados: " + str(len(p.parser.actual.elementos[p[1]].parametros)) + ", Referenciados: " + str(len(p[3])) + "]"
    escribir_archivo(p,linea)

def error6(p):
    linea = "Error 6: Elemento " + p[1] + " no es un Subprograma"
    escribir_archivo(p,linea)

def error7(p):
    linea = "Error 7: Condicion no valida en IF"
    escribir_archivo(p,linea)

def error8(p):
    linea = "Error 8: Condicion no valida en While"
    escribir_archivo(p,linea)

def error9(p):
    linea = "Error 9: Condicion no valida en Repeat"
    escribir_archivo(p,linea)

def error10(p):
    linea = "Error 10: Tipos Incompatibles [id:" + p[1] + " y expresion de tipo: " + p[3].tipo_dato + "]"
    escribir_archivo(p,linea)

def error10b(p):
    linea = "Error 10: Tipos Incompatibles [Id: " + p[3].nombre + " de tipo " + p[3].tipo_dato + "]"
    escribir_archivo(p,linea)

def error11(p):
    linea = "Error 11: No se puede alterar el valor de una Constante"
    escribir_archivo(p,linea)

def error12(p):
    linea = "Error 12: Variable deber ser de tipo entera"
    escribir_archivo(p,linea)

def error13(p,tmp):
    linea = "Error 13: Incompatibilidad del operador \""+ p[2] + "\" con tipo de dato " + tmp
    escribir_archivo(p,linea)

def error14(p):
    linea = "Error 14: Parametros de tipo Incorrecto en: "+ p[1]
    escribir_archivo(p,linea)

def error15(p):
    linea = 'Error 15: Resultado de '+ p[1].nombre +' no asigando a una variable.'
    escribir_archivo(p,linea)

def error16(p):
    linea = "Error 16: El rango es incorrecto (" + p[1] + " es mayor que " + p[3] + ")"
    escribir_archivo(p,linea)

def error17(p):
    linea = "Error 17: Tipos incompatibles dentro de lista de cases (" + p[1] + " y " + p[3] + ")"
    escribir_archivo(p,linea)

def error17b(p):
    linea = "Error 17: Tipos incompatibles dentro de lista de cases (" + p[1] + " y " + p[2] + ")"
    escribir_archivo(p,linea)

def error18(p):
    linea = "Error 18: La variable: " + p[2] + " no esta declarada."
    escribir_archivo(p,linea)

def error19(p):
    linea = "Error 19: La funcion debe devolver un dato de tipo " + p.parser.actual.elementos["result"].tipo_dato
    escribir_archivo(p,linea)

def error20(p,item):
    linea = "Error 20: " + item.nombre + "Nombre campo repetido dentro del Type!"
    escribir_archivo(p,linea)

def error21(p):
    linea = "Error 21: El Selector debe ser de tipo Ordinal"
    escribir_archivo(p,linea)

def error22(p):
    linea = "Error 22: Asignacion ilegal por variable repetida en el ciclo for"
    escribir_archivo(p,linea)

def error23(p):
    linea = "Error 23: " + p
    escribir_archivo(p,linea)

def escribir_archivo(p,linea):
    if "lineno" in dir(p): linea += ". En linea " + str(p.lineno(1))
    print(linea)
    txt=open("Resultados\Log_errores.txt","a")
    txt.write(linea + "\n")
    txt.close()

def crear_txt():
    txt=open("Resultados\Log_errores.txt","w")
    txt.close()


